package io;

import java.io.*;

/**
 * @author IT枫斗者
 * @ClassName CopyFileTest.java
 * @From www.javatiaozao.com
 * @Description TODO
 */
public class CopyFileTest {
    public static void main(String[] args) throws IOException {
          //复制目录及子目录
        //分析思路：将源文件/文件夹 复制到目标文件夹中

        //创建两个文件目录，一个是源文件，一个目标文件
        File srcFile = new File("E:\\tiaozaoclass\\FileDoc");
        File destFile = new File("E:\\tiaozaoclass\\myDoc");
        //复制文件夹/文件
        copyDirsAndFile(srcFile,destFile);
    }

    private static void copyDirsAndFile(File srcFile, File destFile) throws IOException {
        //获取源文件的名称
        String srcName = srcFile.getName();
        System.out.println(srcName);

        //在目标文件夹中，创建一个以源文件名称的文件夹
        File copyFile = new File(destFile, srcName);
        copyFile.mkdirs();

        //获取源文件下面所以的文件对象
        File[] files = srcFile.listFiles();
        //遍历文件数组：
        for (File f: files
             ) { //f:是源文件的名称 copyFile是目标文件的写入名称
           //进入循环后，判断是否是文件夹
            if(f.isDirectory()){
                //如果是文件夹，那么继续递归
                copyDirsAndFile(f,copyFile);
            }else  {
                //复制文件
                //创建字节缓冲输入输出流
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(copyFile, f.getName())));
                //读写数据
                byte[] bys = new byte[1024];
                int len;
                while ((len=bis.read(bys)) != -1) {
                    bos.write(bys,0,len);
                    bos.flush();
                }
                bis.close();
                bos.close();
            }
        }
    }

}
